package com.demo;

/**
 * @author chenyuan
 * @date 2020/10/24 10:07
 */

import com.alibaba.fastjson.JSONObject;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.Transaction;

/**
 * 操作事务
 */
public class TestTX {
    public static void main(String[] args) {
        Jedis jedis = new Jedis("192.168.142.120",6379);

        // 伪造数据
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("name","hehe");
        jsonObject.put("sex","male");
        // 先清空数据库
        jedis.flushDB();
        // 开启事务
        Transaction multi = jedis.multi();
        // 进行事务操作
        // 因为 redis 的事务没有原子性，所以这里使用 try-catch 来保证原子性
        try {
            multi.set("user1", jsonObject.toJSONString());
            multi.set("user2", jsonObject.toJSONString());
            multi.set("user3", jsonObject.toJSONString());
            int i = 1 / 0;
            multi.exec();
        } catch (Exception e) {
            //一旦上面的代码抛出异常，就放弃事务
            multi.discard();
            e.printStackTrace();
        } finally {
            // 输出数据
            System.out.println(jedis.get("user1"));
            // 关闭连接
            jedis.close();
        }
    }
}
